package cn.edu.gues.infosystam.controller;


import cn.edu.gues.infosystam.entity.Fields;
import cn.edu.gues.infosystam.entity.Teacher;
import cn.edu.gues.infosystam.entity.Template;
import cn.edu.gues.infosystam.entity.User;
import cn.edu.gues.infosystam.service.FieldsService;
import cn.edu.gues.infosystam.service.TemplateService;
import cn.edu.gues.infosystam.utils.R;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;

import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.List;

/**
 * <p>
 *  前端控制器
 * </p>
 *
 * @author 苏小小
 * @since 2020-06-11
 */
@Controller
@RequestMapping("/Template")
public class TemplateController {

    /**
     * 高级控件
     */
    @Autowired
    private FieldsService fieldsService;

    /**
     * 模板
     */
    @Autowired
    private TemplateService templateService;

    @Autowired
    private HttpSession httpSession;


    /**
     * 添加模板视图
     * @return
     */
    @RequestMapping("/Add")
    public String addTemplateView(Model model) {
        Teacher teacher = getUserInfoByTeacher();
        if (teacher == null) {
            return "Login";
        }

        // 获取高级控件
        List<Fields> fields = fieldsService.list(null);

        model.addAttribute("fields",fields);
        return "Template_Add";
    }

    /**
     * 编辑模板界面
     * @param templateId 模板ID
     * @param model
     * @return
     */
    @RequestMapping("/Edit/{templateId}")
    public String edidTemplateView(@PathVariable Integer templateId, Model model){
        Teacher teacher = getUserInfoByTeacher();
        if (teacher == null) {
            return "Login";
        }

        // 获取高级控件
        List<Fields> fields = fieldsService.list(null);
        Template template = templateService.getById(templateId);

        model.addAttribute("template",template);
        model.addAttribute("fields",fields);
        return "Template_Edit";
    }

    /**
     * 模板列表界面
     * @param p 要显示的页（默认为第一页，每页10条数据）
     * @param model
     * @return
     */
    @RequestMapping("/List")
    public String listTemplateView(@RequestParam(name = "p", defaultValue = "1") int p, Model model){
        Teacher teacher = getUserInfoByTeacher();
        if (teacher == null) {
            return "Login";
        }

        // 获取所有可用模板
        Page<Template> templates = templateService.getAllTemplate( teacher.getTno(), p, 10);

        model.addAttribute("templates", templates);
        return "Template_List";
    }

    /**
     * 保存模板内容（Ajax）
     * @param templateName 模板名称
     * @param fields 模板提交字段
     * @param context 模板内容
     * @return
     */
    @ResponseBody
    @PostMapping("/SaveTemplate")
    public R saveTemplate(String templateName, String fields, String context){
        Teacher teacher = getUserInfoByTeacher();
        if (teacher == null)
            return R.error().message("你尚未登录，请先登录");

        Template template = new Template();

        template.setTno(teacher.getTno());
        template.setTemplateName(templateName.trim());
        template.setTemplateFields(fields.trim());
        template.setTemplateContext(context.trim());

        QueryWrapper<Template> queryWrapper = new QueryWrapper<Template>();
        queryWrapper.eq("template_name", template.getTemplateName());
        Template one = templateService.getOne(queryWrapper);

        if (one != null){
            return R.error().message("模板名称已存在");
        } else {
            boolean saveOrUpdate = templateService.saveOrUpdate(template, queryWrapper);
            if (saveOrUpdate)
                return R.success().data("Template",template);
            else
                return R.error().message("没有保存成功");
        }
    }

    /**
     * 更新模板内容（Ajax）
     * @param templateName 模板名称
     * @param fields 模板提交字段
     * @param context 模板内容
     * @return
     */
    @ResponseBody
    @PostMapping("/UpdateTemplate")
    public R updateTemplate(Integer templateId, String templateName, String fields, String context){
        Teacher teacher = getUserInfoByTeacher();
        if (teacher == null)
            return R.error().message("你尚未登录，请先登录");

        Template template = new Template();

        template.setTemplateId(templateId);
        template.setTemplateName(templateName.trim());
        template.setTemplateFields(fields.trim());
        template.setTemplateContext(context.trim());
//        template.setGmtModified(new Date());
//
        if (templateService.updateById(template))
            return R.success().data("Template",template);
        return R.error().message("您的操作存在异常或网络被劫持");
    }

    /**
     * 删除模板内容（逻辑删除 Ajax ）
     * @param templateId 模板Id
     * @return
     */
    @ResponseBody
    @PostMapping("/Del")
    public R Del(Integer templateId){
        Teacher teacher = getUserInfoByTeacher();
        if (teacher == null)
            return R.error().message("你尚未登录，请先登录");

        boolean remove = templateService.removeById(templateId);

        if (remove)
            return R.success();
        else
            return R.error();
    }


    /**
     * 获取教师登录信息
     * @return
     */
    private Teacher getUserInfoByTeacher(){
        User userInfo = (User)httpSession.getAttribute("userInfo");
        if (userInfo == null) {
            httpSession.setAttribute("errorMsg", "请先登录");
            // 登录后可以返回的界面
            httpSession.setAttribute("historyHref","/Report/List");
            return null;
        }

        return (Teacher) userInfo.getUserInfo();
    }

}

